#include <iostream>
using namespace std;
int N,M,Si;
bool map[220][220];
bool visit[220];
int link[220];
bool dfs(int vs)
{
    int i;
    for(i=1;i<=M;i++)
    {
        if(map[vs][i]&&!visit[i])
        {
            visit[i]=true;
            if(!link[i]||dfs(link[i]))
            {
                link[i]=vs;
                return true;
            }
        }
    }
    return false;
}
int main()
{
    int i,j,count,t;
    while(cin>>N>>M)
    {
        fill(map[0],map[0]+220*220,false);
        fill(link,link+220,0);
        count=0;
        for(i=1;i<=N;i++)
        {
            cin>>Si;
            for(j=1;j<=Si;j++)
            {
                cin>>t;
                map[i][t]=true;
            }
        }
        for(i=1;i<=N;i++)
        {
            fill(visit,visit+220,false);
            if(dfs(i))
                count++;
        }
        cout<<count<<endl;
    }
    return 0;
}
